

const key = "64CBZ-OA5K4-KH3UV-DMCQX-2P4MJ-VJFQD";

/**
 * 路线规划相关函数，请求相关规划数据，以及将返回的数据解压后返回
 */

 /**
  * 
  * @param {起点，纬度在前，经度在后，逗号分割} from_point 
  * @param {*} to_point 
  */
function getRoutePlan_DRIVE(from_point, to_point){
  return new Promise((resolve,rejects)=>{
    wx.request({
      url: 'https://apis.map.qq.com/ws/direction/v1/driving/',
      method:'GET',
      data:{
        key: key,
        from: from_point,
        to: to_point,
        get_mp: 1,//是否返回多条路线，这里写死
        output: 'json'
      },
      success:function(res){
        if(res.data.status == 0){
          let result = res;
          for(let i=0;i<res.data.result.routes.length;i++){//分别解压每条路线中的polyline
           res.data.result.routes[i].polyline = unzip_polyline(res.data.result.routes[i].polyline);
          }
          resolve(result);
        }else{
          resolve(res)
        }
      },
      fail:function(res){
        rejects(res);
      }
    })
  });
}

//步行路线的请求
function getRoutePlan_WALKING(from,to){
  return new Promise((resolve,rejects)=>{
    wx.request({
      url: 'https://apis.map.qq.com/ws/direction/v1/walking/',
      method:'GET',
      data:{
        key: key,
        from: from,
        to: to,
        output: 'json'
      },
      success:function(res){
        if(res.data.status == 0){
          let result = res;
          for(let i=0;i<res.data.result.routes.length;i++){//分别解压每条路线中的polyline
           res.data.result.routes[i].polyline = unzip_polyline(res.data.result.routes[i].polyline);
          }
          resolve(result);
        }else{
          resolve(res)
        }
      },
      fail:function(res){
        rejects(res);
      }
    });
  })
}


//请求公共交通线路信息，这个有点麻烦，需要每一步的polyline都要进行操作
function getRoutePlan_BUSLINE(from, to){
  return new Promise((resolve,rejects)=>{
    wx.request({
      url: 'https://apis.map.qq.com/ws/direction/v1/transit/',
      method:'GET',
      data:{
        key: key,
        from: from,
        to: to,
        output: 'json'
      },
      success: function(res){
        console.log("[REQUEST] -- BUSLINE原始数据",res);
        if(res.data.status == 0){
          let result = res;//先放个变量指向res
          //这次的数据有点特别，每条route中的steps中都有polyline，所以循环起来很麻烦
          for(let i=0;i<res.data.result.routes.length;i++){
            
            for(let j=0;j<res.data.result.routes[i].steps.length;j++){
              //算上这个函数，有三层循环了，佛祖保佑内存不要爆掉。
              if(res.data.result.routes[i].steps[j].mode == "WALKING"){//这里的polyline可以直接处理
                res.data.result.routes[i].steps[j].polyline = unzip_polyline(res.data.result.routes[i].steps[j].polyline);
              }
              if(res.data.result.routes[i].steps[j].mode == "TRANSIT"){
                //line不止一条的
                for(let k=0;k<res.data.result.routes[i].steps[j].lines.length;k++){
                  res.data.result.routes[i].steps[j].lines[k].polyline = unzip_polyline(res.data.result.routes[i].steps[j].lines[k].polyline);
                }
              }
            }
          }

          resolve(result);
        }else{
          rejects(res);
        }
      },
      fail: function(res){
        rejects(res);
      }
    })
  });
}

//polyline 解压
function unzip_polyline(polyline){
  var coors= polyline;
  for (var i = 2; i < coors.length ; i++)
  {
    coors[i] = coors[i-2] + coors[i]/1000000
  }
  //再循环一次，取小数点6位就够了
  for(let j=0; j< coors.length; j++){
    coors[j] = Number(coors[j]).toFixed(6);
    // coors[j] = parseFloat(coors[j])
  }
  return coors;
}

//对象深拷贝
// 对象深拷贝函数
var deepClone = function(initalObj) {
  var obj = {};
  obj = JSON.parse(JSON.stringify(initalObj));
  return obj;
}
//数组元素移动到底部
var bottom = function(index, array) {
  if (index === array.length - 1) return array
  // 删除当前数组元素，并将被删除的值添加到数组末尾
  array.push(array.splice(index, 1)[0])
  return array
}

module.exports = {
  getRoutePlan_DRIVE: getRoutePlan_DRIVE,
  unzip_polyline : unzip_polyline,
  getRoutePlan_WALKING : getRoutePlan_WALKING,
  getRoutePlan_BUSLINE : getRoutePlan_BUSLINE,
  deepClone : deepClone,
  bottom : bottom
}